{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 7.6 Reduced Port Ball Valve"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Water is discharged at 15 degrees Celsius from a tank with 7 m of head to atmosphere through:\n",
    "\n",
    "* 60 meters of 80 mm schedule 40 pipe\n",
    "* Six 80 mm standard 90 degree threaded elbows\n",
    "* One 80 mm flanged ball valve, with a 60 mm diameter seat, 16 degree conical inlet and 30 degree conical outlet.\n",
    "* The entrance is sharp-edged and flush with the tank"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Velocity = 2.770041323755228 meter / second\n",
      "Flow rate = 792.5474399133158 liter / minute\n"
     ]
    }
   ],
   "source": [
    "from thermo.units import Chemical\n",
    "from fluids.units import *\n",
    "from math import pi\n",
    "water = Chemical('water', T=15*u.degC)\n",
    "rho = water.rho\n",
    "mu = water.mu\n",
    "\n",
    "H = 7*u.m\n",
    "L = 60*u.m\n",
    "fd = 0.017 # assumed in their example\n",
    "NPS, D_pipe, Do_pipe, t = nearest_pipe(Do=80*u.mm)\n",
    "\n",
    "K = K_from_f(fd=fd, L=L, D=D_pipe)\n",
    "K += entrance_sharp()\n",
    "K += exit_normal()\n",
    "K += 6*bend_rounded(D_pipe, angle=90*u.degrees, fd=fd, bend_diameters=0.65)\n",
    "ball_valve_angle = 0.5*(15+30)*u.degrees # use the average angle\n",
    "K += K_ball_valve_Crane(D1=D_pipe, D2=60*u.mm, angle=ball_valve_angle, fd=fd)\n",
    "\n",
    "v = (2*u.gravity*H/K)**0.5\n",
    "print('Velocity = %s' %v.to_base_units())\n",
    "Q = v*pi/4*D_pipe**2\n",
    "print('Flow rate = %s' %Q.to(u.L/u.min))\n",
    "Re = Reynolds(D=D_pipe, rho=rho, mu=mu, V=v)\n",
    "fd = friction_factor(Re=Re, eD=0.0018*u.inch/D_pipe)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The radius of curvature of the elbows was not specified; 0.65 bend diameters matches their results most closely. They modified the ball valve equation to support both an inlet and an outlet angle; the average value is used here.\n",
    "\n",
    "Their calculated values are 2.74 m/s and flow rate of 781 L/min.\n",
    "\n",
    "The calculation can be performed more accurately by iterating; a naive approach is shown below. A very different flow rate is obtained when the roughness of the pipe is considered in the friction factor calculation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Flow rate = 792.5474399133158 liter / minute\n",
      "Flow rate = 748.2664116002655 liter / minute\n",
      "Flow rate = 746.5628913428789 liter / minute\n",
      "Flow rate = 746.4941928055326 liter / minute\n",
      "Flow rate = 746.4914172120895 liter / minute\n",
      "Flow rate = 746.491305062719 liter / minute\n",
      "Flow rate = 746.4913005312487 liter / minute\n"
     ]
    }
   ],
   "source": [
    "fd = 0.017\n",
    "for i in range(7):\n",
    "    K = K_from_f(fd=fd, L=L, D=D_pipe)\n",
    "    K += entrance_sharp()\n",
    "    K += exit_normal()\n",
    "    K += 6*bend_rounded(D_pipe, angle=90*u.degrees, fd=fd, bend_diameters=0.65)\n",
    "    ball_valve_angle = 0.5*(15+30)*u.degrees # use the average angle\n",
    "    K += K_ball_valve_Crane(D1=D_pipe, D2=60*u.mm, angle=ball_valve_angle, fd=fd)\n",
    "\n",
    "    v = (2*u.gravity*H/K)**0.5\n",
    "    Q = v*pi/4*D_pipe**2\n",
    "    print('Flow rate = %s' %Q.to(u.L/u.min))\n",
    "    Re = Reynolds(D=D_pipe, rho=rho, mu=mu, V=v)\n",
    "    fd = friction_factor(Re=Re, eD=0.0018*u.inch/D_pipe)"
   ]
  }
 ],
 "metadata": {
  "language_info": {
   "name": "python"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
